在這一章中,我們將介紹 EVM 中與儲存空間相關的指令,包括 SLOAD 和 SSTORE。
SLOAD = 0x54
SSTORE = 0x55
這些指令用於存取合約的儲存空間,允許合約讀取和寫入永久性儲存中的資料。
def sload(self):
location = self.evm.stack.pop()
data = read_from_storage(location) # 從永久性儲存中讀取資料
value = int.from_bytes(data, byteorder='big')
self.evm.stack.append(value)
def sstore(self):
location = self.evm.stack.pop()
value = self.evm.stack.pop()
write_to_storage(location, value) # 將資料寫入永久性儲存
這些指令允許合約在執行過程中存取永久性儲存,進而讀取或寫入資料。
請注意,這些指令的實現需要訪問合約的永久性儲存,你需要根據具體情況自行實現相應的永久性儲存讀取和寫入邏輯。
這邊就要拉回第一章設計的 EVM Class,我們需要在那邊做空資料初始化,我們在稍後幾章會將 EVM 和這些教過的 class 組合而成完整的狀態機。
class EVM:
def __init__(self, code) -> None:
self.code = code
self.pc = 0
self.stack = []
self.memory = bytearray()
self.storage = {}
在這一章中,我們介紹了 EVM 中與儲存空間相關的指令,包括 SLOAD 和 SSTORE。這些指令允許合約讀取和寫入永久性儲存中的資料。